<!DOCTYPE html>
<html lang="zh-CH" >
<head>
    <meta charset="utf-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
    <meta name="viewport" content="width=device-width, initial-scale=1" />
    <meta name="author" content="" />
	
	
	
	<title>Unity官方文档翻译之 AssetBundle 管理器 ｜ zansimple</title>
	
    
    
    <meta name="description" content="正文 AssetBundle 管理器 AssetBundle 管理器可以在 Asset Store 里面下载，它是一个由 Unity 制作的工具，可以使使用 AssetBundle 更加流线化。下载和导入AssetBundle Manager 包不仅增加了加载和使用AssetBundle的新API调用，而且还添加了一些编辑器功能来简化工作流程。这个功能可以在 Assets 菜单选项下找到。 这个新部分将包含以下选项：
模拟模式（Simulation Mode） 启用模拟模式允许 AssetBundle 管理器使用 AssetBundle，但不需要实际构建 bundle 包本身。编辑器将查看哪些资产被分配给 AssetBundle，并直接使用资产，而不是将它们从 AssetBundle 中提取出来。 使用模拟模式的主要优点是，可以修改、更新、添加和删除资产，而不需要每次都重新构建和部署 assetbundle。 值得注意的是，AssetBundle 变量不能与模拟模式一起工作。如果您需要使用变量，则本地 AssetBundle 服务器是您需要的选项。
本地assetbundle服务器（Local AssetBundle Server） AssetBundle管理器还可以启动一个本地 AssetBundle 服务器，它可以用来在编辑器或本地构建（包括移动）中测试 AssetBundle 。 让本地 AssetBundle 服务器工作的规定是，您必须在项目的根目录中创建一个名为 AssetBundle 的文件夹，该文件夹与资产文件夹的级别相同。如: ![avatar](/images/assetbundle/Local AssetBundle Server.png) 创建文件夹之后，需要将 assetbundle 构建到这个文件夹中。要做到这一点，请从新的菜单选项中选择 Build assetbundle。这将把它们构建到那个目录中。 现在您已经构建了 assetbundle （或者已经决定使用模拟模式），并准备开始加载 assetbundle 。让我们看一下通过 AssetBundle Manager 提供给我们的新的 API 调用。
AssetBundleManage r初始化( AssetBundleManager.Initialize() ) 这个函数加载 AssetBundleManifest 对象，在开始使用 AssetBundle Manager 加载资产之前，您需要调用它。在一个非常简单的例子中，初始化 AssetBundle 管理器可以是这样的：" />
    

    

	
    
    <link rel="shortcut icon" href="https://lenzan.github.io/images/favicon.ico" />

    <link rel="stylesheet" type="text/css" media="screen" href="https://lenzan.github.io/css/normalize.css" />
    <link rel="stylesheet" type="text/css" media="screen" href="https://cdn.jsdelivr.net/npm/animate.css@4.1.0/animate.min.css" />
    <link rel="stylesheet" type="text/css" media="screen" href="https://lenzan.github.io/css/zozo.css" />
	<link rel="stylesheet" type="text/css" media="screen" href="https://cdn.jsdelivr.net/npm/remixicon@2.5.0/fonts/remixicon.css" />
    <link rel="stylesheet" type="text/css" media="screen" href="https://lenzan.github.io/css/highlight.css" />

    
    
</head>

<body>
    <div class="main animate__animated animate__fadeInDown">
        <div class="nav_container animated fadeInDown">
    <div class="site_nav" id="site_nav">
        <ul>
            
            <li>
                <a href="/">首页</a>
            </li>
            
            <li>
                <a href="/">unity</a>
            </li>
            
            <li>
                <a href="/">归档</a>
            </li>
            
            <li>
                <a href="/">关于</a>
            </li>
            
        </ul>
    </div>
    <div class="menu_icon">
        <a id="menu_icon"><i class="ri-menu-line"></i></a>
    </div>
</div>
        <div class="header animated fadeInDown">
    <div class="site_title_container">
        <div class="site_title">
            <h1>
                <a href="https://lenzan.github.io/">
                    <span>zansimple</span>
                    <img src="https://lenzan.github.io/images/logo.svg" />
                </a>
            </h1>
        </div>
        <div class="description">
            <p class="sub_title">专注于Unity虚拟现实开发，游戏开发</p>
            <div class="my_socials">
                
                <a href="https://lenzan.github.io/index.xml" type="application/rss+xml" title="rss" target="_blank"><i
                        class="ri-rss-fill"></i></a>
            </div>
        </div>
    </div>
</div>
        <div class="content">
            <div class="post_page">
                <div class="post animate__animated animate__fadeInDown">
                    <div class="post_title post_detail_title">
                        <h2><a href='/posts/assetbundle/assetbundle-manager/'>Unity官方文档翻译之 AssetBundle 管理器</a></h2>
                        <span class="date">2018.05.30</span>
                    </div>
                    <div class="post_content markdown"><!-- raw HTML omitted -->
<h1 id="正文">正文</h1>
<h2 id="assetbundle-管理器">AssetBundle 管理器</h2>
<p>AssetBundle 管理器可以在 Asset Store 里面下载，它是一个由 Unity 制作的工具，可以使使用 AssetBundle 更加流线化。下载和导入AssetBundle Manager 包不仅增加了加载和使用AssetBundle的新API调用，而且还添加了一些编辑器功能来简化工作流程。这个功能可以在 Assets 菜单选项下找到。
这个新部分将包含以下选项：</p>
<h3 id="模拟模式simulation-mode">模拟模式（Simulation Mode）</h3>
<p>启用模拟模式允许 AssetBundle 管理器使用 AssetBundle，但不需要实际构建 bundle 包本身。编辑器将查看哪些资产被分配给 AssetBundle，并直接使用资产，而不是将它们从 AssetBundle 中提取出来。
使用模拟模式的主要优点是，可以修改、更新、添加和删除资产，而不需要每次都重新构建和部署 assetbundle。
值得注意的是，AssetBundle 变量不能与模拟模式一起工作。如果您需要使用变量，则本地 AssetBundle 服务器是您需要的选项。</p>
<h3 id="本地assetbundle服务器local-assetbundle-server">本地assetbundle服务器（Local AssetBundle Server）</h3>
<p>AssetBundle管理器还可以启动一个本地 AssetBundle 服务器，它可以用来在编辑器或本地构建（包括移动）中测试 AssetBundle 。
让本地 AssetBundle 服务器工作的规定是，您必须在项目的根目录中创建一个名为 AssetBundle 的文件夹，该文件夹与资产文件夹的级别相同。如:
![avatar](/images/assetbundle/Local AssetBundle Server.png)
创建文件夹之后，需要将 assetbundle 构建到这个文件夹中。要做到这一点，请从新的菜单选项中选择 Build assetbundle。这将把它们构建到那个目录中。
现在您已经构建了 assetbundle （或者已经决定使用模拟模式），并准备开始加载 assetbundle 。让我们看一下通过 AssetBundle Manager 提供给我们的新的 API 调用。</p>
<h4 id="assetbundlemanage-r初始化-assetbundlemanagerinitialize-">AssetBundleManage r初始化( AssetBundleManager.Initialize() )</h4>
<p>这个函数加载 AssetBundleManifest 对象，在开始使用 AssetBundle Manager 加载资产之前，您需要调用它。在一个非常简单的例子中，初始化 AssetBundle 管理器可以是这样的：</p>
<pre><code>IEnumerator Start()
{
    yield return StartCoroutine(Initialize());
}
IEnumerator Initialize()
{
    var request = AssetBundleManager.Initialize();
    if (request != null)
        yield return StartCoroutine(request);
}
</code></pre>
<p>AssetBundle 管理器在使用 Initialize（） 期间加载的 manifest 来帮助幕后的许多特性，包括依赖项管理。</p>
<h4 id="加载资源loading-assets">加载资源（Loading Assets）</h4>
<p>你使用的是 AssetBundle 管理器，你已经初始化它，现在你已经准备好加载一些资产了。让我们看一下如何加载 AssetBundle 并从该包中实例化一个对象：</p>
<pre><code>IEnumerator InstantiateGameObjectAsync (string assetBundleName, string assetName)
{
    // Load asset from assetBundle.
    AssetBundleLoadAssetOperation request = AssetBundleManager.LoadAssetAsync(assetBundleName, assetName, typeof(GameObject) );
    if (request == null)
        yield break;
    yield return StartCoroutine(request);
    // Get the asset.
    GameObject prefab = request.GetAsset&lt;GameObject&gt; ();
    if (prefab != null)
        GameObject.Instantiate(prefab);
}
</code></pre>
<p>AssetBundle 管理器异步加载，并返回一个加载请求，它在调用 yield return StartCoroutine（request） 时加载 bundle ;从那里我们需要做的就是调用 GetAsset（） 来从 AssetBundle 加载一个游戏对象。</p>
<h4 id="加载场景loading-scenes">加载场景（Loading Scenes）</h4>
<p>如果你的 assetbundle 中是一个场景，那么你的带有会有稍微的不同。下面是如何从一个 AssetBundle 中加载一个场景：</p>
<pre><code>IEnumerator InitializeLevelAsync (string levelName, bool isAdditive)
{
    // Load level from assetBundle.
    AssetBundleLoadOperation request = AssetBundleManager.LoadLevelAsync(sceneAssetBundle, levelName, isAdditive);
    if (request == null)
        yield break;
    yield return StartCoroutine(request);
}
</code></pre>
<p>如您所见，加载场景也是异步的，LoadLevelAsync 返回一个加载请求，它需要被传递到 StartCoroutine，以便加载场景。</p>
<h4 id="加载版本变量load-variants">加载版本变量（Load Variants）</h4>
<p>使用 AssetBundle Manager 加载版本变量实际上与加载场景和资源没有什么不同。只需要设置 AssetBundleManager 的 ActiveVariant 属性。
activevariant 属性是字符串数组。简单地构建一系列字符串，其中包含您在分配给资产时创建的版本变量的名称。下面是如何加载带有版本变量的场景 AssetBundle 。</p>
<pre><code>IEnumerator InitializeLevelAsync (string levelName, bool isAdditive, string[] variants)
{
    //Set the activeVariants.
    AssetBundleManager.ActiveVariants = variants;
    // Load level from assetBundle.
    AssetBundleLoadOperation request = AssetBundleManager.LoadLevelAsync(variantSceneAssetBundle, levelName, isAdditive);
    if (request == null)
        yield break;
    yield return StartCoroutine(request);
}
</code></pre>
<p>在你的的代码的其他地方传入字符串数组。如果版本变量是有效的，这段代码将加载和版本变量一致的 AssetBundles 。</p>
</div>
                    <div class="post_footer">
                        
                        <div class="meta">
                            <div class="info">
                                <span class="field tags">
                                    <i class="ri-stack-line"></i>
                                    
                                    <a href="https://lenzan.github.io/tags/Unity3D/">Unity3D</a>
                                    
                                    <a href="https://lenzan.github.io/tags/AssetBundle/">AssetBundle</a>
                                    
                                </span>
                            </div>
                        </div>
                        
                    </div>
                </div>
                
                
            </div>
        </div>
    </div>
    <a id="back_to_top" href="#" class="back_to_top"><span>△</span></a>
    <footer class="footer">
    <div class="powered_by">
        <a href="https://varkai.com">Designed by VarKai,</a>
        <a href="http://www.gohugo.io/">Proudly published with Hugo</a>
    </div>

    <div class="footer_slogan">
        <span></span>
    </div>
</footer>
    <script src="https://lenzan.github.io/js/jquery-3.5.1.min.js"></script>
<link href="https://lenzan.github.io/css/fancybox.min.css" rel="stylesheet">
<script src="https://lenzan.github.io/js/fancybox.min.js"></script>
<script src="https://lenzan.github.io/js/zozo.js"></script>






</body>

</html>